package cn.jiyun.ai.impl;

import cn.jiyun.ai.UsersService;
import cn.jiyun.ai.common.config.DuanConfig;
import cn.jiyun.ai.common.config.JwtUtil;
import cn.jiyun.ai.common.result.R;
import cn.jiyun.ai.mapper.UsersMapper;
import cn.jiyun.ai.pojo.Users;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UsersServiceImpl extends ServiceImpl<UsersMapper, Users> implements UsersService {
    private static Integer yzm;

    @Autowired
    UsersMapper usersMapper;
    @Autowired
    JwtUtil jwtUtil;
    @Autowired
    RedisTemplate redisTemplate;
    @Autowired
    private DuanConfig duanConfig;

    @Override
    public R login(Users users) {
        //调用验证函数检查用户输入
//        String verify= verify(users);
//        if (!verify.equals("左")){
//            return R.error().message(verify);
//        }

        //查询与输入匹配的用户
        LambdaQueryWrapper<Users> wrapper=new LambdaQueryWrapper<>();
        wrapper.or().eq(Users::getUsername,users.getUsername()).eq(Users::getPassword,users.getPassword()).or()
                .eq(Users::getPhone,users.getUsername()).eq(Users::getPassword,users.getPassword());
//        wrapper.eq(Users::getPassword,users.getPassword());

        List<Users> users1=usersMapper.selectList(wrapper);
        if (users1.size() <= 0){
            return R.error().message("用户名不存在或密码错误！");
        }
        if (yzmm(users)){
            return R.error().message("密码错误！");
        }
        String token = jwtUtil.createToken(users1.get(0).getId());
//        redisTemplate.opsForValue().set(token,users1.get(0).getPhone());
        return R.ok().data("token",token);

    }

    //验证密码
    public Boolean yzmm(Users users){
        List<Users> users1 = usersMapper.selectList(null);
        for (Users user1 : users1) {
            if (users.getPassword().equals(user1.getPassword())){
                return false;
            }
        }
        return true;
    }

    // 处理忘记密码请求
    public R forget(Users user){
        // 检查验证码是否为空
        if (user.getCode()==null){
            return R.error().message("验证码不能为空！");
        }
        // 检查验证码是否正确
        if (!user.getCode().equals(yzm)){
            return R.error().message("验证码错误！");
        }
        // 检查手机号是否已注册
        List<Users> users = usersMapper.selectList(null);
        for (Users user1 : users) {
            if (user1.getPhone().equals(user.getPhone())){
                return R.ok();
            }
        }
        return R.error().message("该用户未被注册！");
    }

    public R yan(Users user) throws Exception {
        // 检查手机号是否为空
        if (user.getPhone()==null||user.getPhone().equals("")){
            return R.error().message("手机号不能为空！！！");
        }
        // 检查手机号格式是否正确
        if (user.getPhone().length()!=11){
            return R.error().message("手机号错误！！！");
        }
        // 检查手机号是否已注册以及邮箱判重
        List<Users> users = usersMapper.selectList(null);
        for (Users user1 : users) {
            if (user1.getPhone().equals(user.getPhone())){
                return R.error().message("该手机号已注册");
            }
        }
        Integer i = duanConfig.duanConfig(user);
        yzm=i;
        redisTemplate.opsForValue().set(user.getPhone()+"的注册验证码",i+"");
        return R.ok().data("yan",i);
    }

    public R yan1(Users user) throws Exception {
        // 检查手机号是否为空
        if (user.getPhone()==null||user.getPhone().equals("")){
            return R.error().message("手机号不能为空！！！");
        }
        // 检查手机号格式是否正确
        if (user.getPhone().length()!=11){
            return R.error().message("手机号格式错误！！！");
        }
        LambdaQueryWrapper<Users> w = new LambdaQueryWrapper<>();
        w.eq(Users::getPhone,user.getPhone());
        List<Users> users = usersMapper.selectList(w);
        if (users.size()<=0){
            return R.error().message("该手机号未被注册！");
        }
        Integer i = duanConfig.duanConfig(user);
        yzm=i;
        redisTemplate.opsForValue().set(user.getPhone()+"的忘记密码验证码",i+"");
        return R.ok().data("yan",i);
    }
}
